/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * frmClientes.java
 *
 * Created on 23-ago-2011, 1:09:03
 */

package GUI;

import Negocio.DatosPrestamo;
import Util.GestorErrores;
import Util.Varios;
import java.util.Vector;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Javi
 */
public class frmCompras extends javax.swing.JDialog {
    //Referencia a un objeto (Préstamo o Solicitud Préstamo)
    private DatosPrestamo _oDatosPrestamo;

    //Referencia al formulario de detalle (hijo)
    private frmComprasDet _frmComprasDet = null;
    //Referencia al formulario de búsqueda
    private frmComprasBus _frmComprasBus = null;

    //Referencias a los vectores que utiliza el JTable para mostrar la cuadrícula de datos.
    private Vector _columnIdentifiers;
    private Vector _dataVector;

    //Esta variable permite poner un filtro constante en la pantalla por cliente
    //Se utiliza en el acceso desde historial de clientes
    private String _sCondicionIdCliente = "";
    private int _iFila; //Fila de la tabla a actualizar/borrar. -1 si es una inserción

    /** Creates new form frmCompras */
    public frmCompras(frmClientes parent, boolean modal, DatosPrestamo oDatosPrestamo) {
        super(parent, modal);
        //Inicializo el objeto asociado con un Prestamo o una SolicitudPréstamo recibido como parámetro
        this._oDatosPrestamo = oDatosPrestamo;
        this.inicializaFormulario();
    }

    /** Creates new form frmCompras */
    public frmCompras(java.awt.Frame parent, boolean modal, DatosPrestamo oDatosPrestamo) {
        super(parent, modal);
        //Inicializo el objeto asociado con un Prestamo o una SolicitudPréstamo recibido como parámetro
        this._oDatosPrestamo = oDatosPrestamo;
        this.inicializaFormulario();
    }

    private void inicializaFormulario(){
        this.setTitle( this._oDatosPrestamo.getsDescripTabla() );
        //Aqui se crean los vectores.
        this._columnIdentifiers = new Vector ();
        this._dataVector = new Vector ();
        //Los datos del panel de datos se cargan en este método
        initComponents();
        //Se muestra el botón de conceder préstamo SOLO si estamos en la pantalla de Solicitudes de Préstamos,
        //es decir, si el objeto asociado al formulario es una SOLICITUD de PRESTAMO (no concedido aún)
        if (this._oDatosPrestamo.isbConcedido() )
            this.jButtonConceder.setVisible(false);
        else
            this.jButtonConceder.setVisible(true);
        getRootPane().setDefaultButton(jButtonConsultar);
    }

    public DatosPrestamo getoObjetoDatos() {
        return _oDatosPrestamo;
    }

    //Permite establecer un FILTRADO PERMANENTE por un CÓDIGO DE CLIENTE en esta pantalla
    public void setsCondicionIdCliente (int iIdCliente){
        this._sCondicionIdCliente = _oDatosPrestamo.getoCliente().getoClienteDatPers().getsNombreTabla() + ".IdCliente = " + iIdCliente;
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jToolBar1 = new javax.swing.JToolBar();
        jButtonAnadir = new javax.swing.JButton();
        jButtonConsultar = new javax.swing.JButton();
        jButtonModificar = new javax.swing.JButton();
        jButtonConceder = new javax.swing.JButton();
        jButtonBorrar = new javax.swing.JButton();
        jSeparator1 = new javax.swing.JToolBar.Separator();
        jButtonFiltrar = new javax.swing.JButton();
        jButtonQuitarFiltros = new javax.swing.JButton();
        jSeparator2 = new javax.swing.JToolBar.Separator();
        jButtonCerrar = new javax.swing.JButton();
        panelTabla = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTableDatos = new javax.swing.JTable();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        jToolBar1.setFloatable(false);
        jToolBar1.setRollover(true);

        jButtonAnadir.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Recursos/Alta.gif"))); // NOI18N
        jButtonAnadir.setText("Alta");
        jButtonAnadir.setToolTipText("Alta");
        jButtonAnadir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonAnadirActionPerformed(evt);
            }
        });
        jToolBar1.add(jButtonAnadir);

        jButtonConsultar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Recursos/Consulta.gif"))); // NOI18N
        jButtonConsultar.setText("Consultar");
        jButtonConsultar.setToolTipText("Consultar");
        jButtonConsultar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonConsultarActionPerformed(evt);
            }
        });
        jToolBar1.add(jButtonConsultar);

        jButtonModificar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Recursos/Modificacion.gif"))); // NOI18N
        jButtonModificar.setText("Modificar");
        jButtonModificar.setToolTipText("Modificar");
        jButtonModificar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonModificarActionPerformed(evt);
            }
        });
        jToolBar1.add(jButtonModificar);

        jButtonConceder.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Recursos/Prestamo.gif"))); // NOI18N
        jButtonConceder.setText("Conceder");
        jButtonConceder.setToolTipText("Conceder préstamo");
        jButtonConceder.setFocusable(false);
        jButtonConceder.setHorizontalTextPosition(javax.swing.SwingConstants.LEADING);
        jButtonConceder.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonConcederActionPerformed(evt);
            }
        });
        jToolBar1.add(jButtonConceder);

        jButtonBorrar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Recursos/Baja.gif"))); // NOI18N
        jButtonBorrar.setText("Borrar");
        jButtonBorrar.setToolTipText("Borrar");
        jButtonBorrar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonBorrarActionPerformed(evt);
            }
        });
        jToolBar1.add(jButtonBorrar);
        jToolBar1.add(jSeparator1);

        jButtonFiltrar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Recursos/Filtrar.gif"))); // NOI18N
        jButtonFiltrar.setText("Filtrar");
        jButtonFiltrar.setToolTipText("Filtrar");
        jButtonFiltrar.setFocusable(false);
        jButtonFiltrar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonFiltrarActionPerformed(evt);
            }
        });
        jToolBar1.add(jButtonFiltrar);

        jButtonQuitarFiltros.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Recursos/QuitarFiltro.gif"))); // NOI18N
        jButtonQuitarFiltros.setText("Quitar filtros");
        jButtonQuitarFiltros.setToolTipText("Quitar filtros");
        jButtonQuitarFiltros.setFocusable(false);
        jButtonQuitarFiltros.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonQuitarFiltrosActionPerformed(evt);
            }
        });
        jToolBar1.add(jButtonQuitarFiltros);
        jToolBar1.add(jSeparator2);

        jButtonCerrar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Recursos/Volver.gif"))); // NOI18N
        jButtonCerrar.setText("Volver");
        jButtonCerrar.setToolTipText("Volver");
        jButtonCerrar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonCerrarActionPerformed(evt);
            }
        });
        jToolBar1.add(jButtonCerrar);

        jTableDatos.setModel(new ModeloTabla());
        jTableDatos.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        jScrollPane1.setViewportView(jTableDatos);

        javax.swing.GroupLayout panelTablaLayout = new javax.swing.GroupLayout(panelTabla);
        panelTabla.setLayout(panelTablaLayout);
        panelTablaLayout.setHorizontalGroup(
            panelTablaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelTablaLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 697, Short.MAX_VALUE)
                .addContainerGap())
        );
        panelTablaLayout.setVerticalGroup(
            panelTablaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelTablaLayout.createSequentialGroup()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 529, Short.MAX_VALUE)
                .addContainerGap())
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jToolBar1, javax.swing.GroupLayout.DEFAULT_SIZE, 697, Short.MAX_VALUE)
                .addContainerGap())
            .addComponent(panelTabla, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(panelTabla, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jButtonAnadirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonAnadirActionPerformed
        this._iFila = -1;
        //Inicializamos el objeto
        this._oDatosPrestamo.inicializa();
        //Create and set up the window.
        if ( this._frmComprasDet == null ){
            this._frmComprasDet = new frmComprasDet( this, true );
            this._frmComprasDet.setLocationRelativeTo(this);
            this._frmComprasDet.pack();
        }
        this._frmComprasDet.inicializaFormulario('A');
        this._frmComprasDet.setVisible(true);
}//GEN-LAST:event_jButtonAnadirActionPerformed

    private void jButtonModificarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonModificarActionPerformed
        if ( jTableDatos.getSelectedRow() == -1 )
            JOptionPane.showMessageDialog( null,"No hay ninguna fila seleccionada","Aviso", JOptionPane.WARNING_MESSAGE);
        else {
            this._iFila = jTableDatos.getSelectedRow();
            DefaultTableModel md = (DefaultTableModel) jTableDatos.getModel();
            //Obtenemos la clave del objeto y lo cargamos de la BD
            this._oDatosPrestamo.vectorJTableAClavesClase(this._columnIdentifiers, (Vector) md.getDataVector().get(this._iFila) );
            //Inicializo el vector global de errores
            GestorErrores.getInstancia().getvErrores().clear();
            this._oDatosPrestamo.recupera();
            //Create and set up the window.
            if ( this._frmComprasDet == null ){
                this._frmComprasDet = new frmComprasDet( this, true );
                this._frmComprasDet.setLocationRelativeTo(this);
                this._frmComprasDet.pack();
            }
            this._frmComprasDet.inicializaFormulario('M');
            this._frmComprasDet.setVisible(true);
        }
}//GEN-LAST:event_jButtonModificarActionPerformed

    private void jButtonBorrarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonBorrarActionPerformed
        if ( jTableDatos.getSelectedRow() == -1 )
            JOptionPane.showMessageDialog( null,"No hay ninguna fila seleccionada","Aviso", JOptionPane.INFORMATION_MESSAGE);
        else {
            this._iFila = jTableDatos.getSelectedRow();
            DefaultTableModel md = (DefaultTableModel) jTableDatos.getModel();
            //Obtengo las claves del elemento a partir del panel de datos.
            this._oDatosPrestamo.vectorJTableAClavesClase( this._columnIdentifiers, (Vector) md.getDataVector().get(this._iFila) );
            //Inicializo el vector global de errores
            GestorErrores.getInstancia().getvErrores().clear();
            this._oDatosPrestamo.recupera();
            //Create and set up the window.
            if ( this._frmComprasDet == null ){
                this._frmComprasDet = new frmComprasDet( this, true );
                this._frmComprasDet.setLocationRelativeTo(this);
                this._frmComprasDet.pack();
            }
            this._frmComprasDet.inicializaFormulario('B');
            this._frmComprasDet.setVisible(true);
        }
}//GEN-LAST:event_jButtonBorrarActionPerformed

    private void jButtonCerrarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonCerrarActionPerformed
        setVisible(false);
}//GEN-LAST:event_jButtonCerrarActionPerformed

    private void jButtonConsultarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonConsultarActionPerformed
        if ( jTableDatos.getSelectedRow() == -1 )
            JOptionPane.showMessageDialog( null,"No hay ninguna fila seleccionada","Aviso", JOptionPane.WARNING_MESSAGE);
        else {
            this._iFila = jTableDatos.getSelectedRow();
            DefaultTableModel md = (DefaultTableModel) jTableDatos.getModel();
            //Obtenemos la clave del objeto y lo cargamos de la BD
            this._oDatosPrestamo.vectorJTableAClavesClase(this._columnIdentifiers, (Vector) md.getDataVector().get(this._iFila) );
            //Inicializo el vector global de errores
            GestorErrores.getInstancia().getvErrores().clear();
            this._oDatosPrestamo.recupera();
            //Create and set up the window.
            if ( this._frmComprasDet == null ){
                this._frmComprasDet = new frmComprasDet( this, true );
                this._frmComprasDet.setLocationRelativeTo(this);
                this._frmComprasDet.pack();
            }
            this._frmComprasDet.inicializaFormulario('C');
            this._frmComprasDet.setVisible(true);
        }
    }//GEN-LAST:event_jButtonConsultarActionPerformed

    private void jButtonFiltrarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonFiltrarActionPerformed
        //Create and set up the window.
        if ( this._frmComprasBus == null ){
            this._frmComprasBus = new frmComprasBus( this, true );
            this._frmComprasBus.setLocationRelativeTo(this);
            this._frmComprasBus.pack();
        }
        this._frmComprasBus.inicializaFormulario('S');
        this._frmComprasBus.setVisible(true);
}//GEN-LAST:event_jButtonFiltrarActionPerformed

    private void jButtonQuitarFiltrosActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonQuitarFiltrosActionPerformed
        this.actualizarVista("");
}//GEN-LAST:event_jButtonQuitarFiltrosActionPerformed

    private void jButtonConcederActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonConcederActionPerformed
        if ( jTableDatos.getSelectedRow() == -1 )
            JOptionPane.showMessageDialog( null,"No hay ninguna fila seleccionada","Aviso", JOptionPane.WARNING_MESSAGE);
        else {
            this._iFila = jTableDatos.getSelectedRow();
            DefaultTableModel md = (DefaultTableModel) jTableDatos.getModel();
            //Obtenemos la clave del objeto y lo cargamos de la BD
            this._oDatosPrestamo.vectorJTableAClavesClase(this._columnIdentifiers, (Vector) md.getDataVector().get(this._iFila) );
            //Inicializo el vector global de errores
            GestorErrores.getInstancia().getvErrores().clear();
            this._oDatosPrestamo.recupera();
            //Create and set up the window.
            if ( this._frmComprasDet == null ){
                this._frmComprasDet = new frmComprasDet( this, true );
                this._frmComprasDet.setLocationRelativeTo(this);
                this._frmComprasDet.pack();
            }
            this._frmComprasDet.inicializaFormulario('N');
            this._frmComprasDet.setVisible(true);
        }
    }//GEN-LAST:event_jButtonConcederActionPerformed

    /*
     * Recarga el panel de datos a partir de las tablas de la BD
     */
    public void actualizarVista(String sCondWhere){
        //Inicializo los vectores
        this._columnIdentifiers.clear();
        this._dataVector.clear();
        //PRIMERO miro si se aplica una condición para cambiar el color de fondo del botón.
        //No queremos considerar el filtro permanente de cliente
        if (sCondWhere.trim().compareTo("") != 0)
            Varios.setBackgroundColorActivated (this.jButtonFiltrar, true);
        else
            Varios.setBackgroundColorActivated (this.jButtonFiltrar, false);
        //Actualizo la condición que utiliza el selectAll
        //Primero miro si va rellena la condición de cliente y, si es así, la añado al resto de las condiciones.
        if (this._sCondicionIdCliente.compareTo("") != 0){
            if (sCondWhere.compareTo("") != 0)
                sCondWhere += " AND " + this._sCondicionIdCliente;
            else
                sCondWhere += this._sCondicionIdCliente;
        }
        this._oDatosPrestamo.setsCondWhere(sCondWhere);
        //Inicializo el vector global de errores
        GestorErrores.getInstancia().getvErrores().clear();
        //Recuperar la información de la tabla (los nombres de campos y los datos)
        boolean bCargaOK = this._oDatosPrestamo.selectAll( this._columnIdentifiers, this._dataVector );
        if (!bCargaOK){
            //Si ha habido errores informo de ellos
            String mensaje = "¡Error al cargar los datos!" + "\n";
            for (int i= 0; i< GestorErrores.getInstancia().getvErrores().size(); i++)
                mensaje = mensaje + GestorErrores.getInstancia().getvErrores().get(i) + "\n";
            JOptionPane.showMessageDialog( null, mensaje,"Error", JOptionPane.ERROR_MESSAGE);
        }
        DefaultTableModel md = (DefaultTableModel) jTableDatos.getModel();
        //Una vez cargados los datos en los vectores, éstos se ASOCIAN a los vectores de datos del JPanel
        //para mostrarlos en pantalla
        md.setDataVector( _dataVector, _columnIdentifiers );
        md.fireTableDataChanged();
    }


    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButtonAnadir;
    private javax.swing.JButton jButtonBorrar;
    private javax.swing.JButton jButtonCerrar;
    private javax.swing.JButton jButtonConceder;
    private javax.swing.JButton jButtonConsultar;
    private javax.swing.JButton jButtonFiltrar;
    private javax.swing.JButton jButtonModificar;
    private javax.swing.JButton jButtonQuitarFiltros;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JToolBar.Separator jSeparator1;
    private javax.swing.JToolBar.Separator jSeparator2;
    private javax.swing.JTable jTableDatos;
    private javax.swing.JToolBar jToolBar1;
    private javax.swing.JPanel panelTabla;
    // End of variables declaration//GEN-END:variables

    class ModeloTabla extends DefaultTableModel {
        /*
         * Sobreescribo el método para impedir que las celdas sean editables
         */
        public boolean isCellEditable(int row, int col) {
            return false;
        }
    }
}
